home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / t_os / tool / wings / w2_src / filer.c < prev    next >
C/C++ Source or Header  |  1994-11-16  |  21KB  |  679 lines

  1. #include <dos.h>
  2. #include <egb.h>
  3. #include <mos.h>
  4. #include <cdrfrb.h>
  5. #include <direct.h>
  6. #include <string.h>
  7. #include <msdos.cf>
  8. #include "define.h"
  9. #include "module.h"
  10. #include "extend.h"
  11. #include "font_sub.h"
  12. #include "filer.h"
  13.  
  14. #define BS 8
  15. #define    FILER_COL_1 8
  16. #define    FILER_COL_2 1
  17. #define    FILER_COL_3 2
  18. #define    FILER_COL_4 15
  19. #define    FILER_COL_5 10
  20.  
  21. static    char    f_name[1024][16], f_attr[1024];
  22. static    char    crr_dir[81];
  23. static    int        page, fx = 132, fy = 135;
  24. static    long    file_size[1024];
  25.  
  26. // ファイルセレクタ関数群
  27. int        filer( char *egbwork, char *strptn, int type, char *name, long *s )
  28.  
  29.     char    key_buff[ 2 ];
  30.     int        i, j, k, m, n, o, ch, mx, my, flag = 0, not_ready, protect;
  31.     int        x1, y1, x2, y2, x3, y3, moji, key_mode;
  32.     UINT    c_drv, d_drv, egb_sel;
  33.     struct {
  34.         short    x1, y1, x2, y2;
  35.     } scroll = { fx + 118, fy +  55, fx + 327, fy + 186 };
  36.     
  37.     char    drv[ 17 ][ 3 ] = {  "A", "B", "C", "D",
  38.                                 "E", "F", "G", "H",
  39.                                 "I", "J", "K", "L",
  40.                                 "M", "N", "O", "P", "Q" };
  41.     *name = '\0';
  42.     j = k = n = o = *s = 0;
  43.     MOS_sleep;
  44.     egb_sel = getds( );
  45.     page = ( EGB_getWritePage( egbwork, egb_sel ) ) ? PAGE_1 : PAGE_0;
  46.     display_filer( egbwork, strptn );
  47.     _dos_getdrive( &c_drv );
  48.     if( c_drv<=2 ){
  49.         disk_status( ( int )c_drv - 1, ¬_ready, &protect );
  50.         n = j = k = 0;
  51.         if( !not_ready ){
  52.             get_filename( &n );
  53.             put_filename( strptn, &j, &k, n );
  54.         }
  55.     }
  56.     else if( c_drv==17 ){
  57.         i = cdr_status( 0, 0, 0 );
  58.         if( !i ){
  59.             get_filename( &n );
  60.             put_filename( strptn, &j, &k, n );
  61.         }
  62.          else
  63.             n = j = k = 0;
  64.     }
  65.     else{
  66.         get_filename( &n );
  67.         put_filename( strptn, &j, &k, n );
  68.     }
  69.     font_kan_col( FILER_COL_1, FILER_COL_4 );
  70.     font_kan( strptn, page, POS( fx+50, fy+43 ), drv[ c_drv - 1 ], 0 );
  71.     MOS_awake;
  72.     goto loop;
  73. jump_b:    ; ;
  74.     display_filer( egbwork, strptn );
  75.     _dos_getdrive( &c_drv );
  76.     if( flag ){
  77.         if( c_drv<=2 ){
  78.             disk_status( ( int )c_drv - 1, ¬_ready, &protect );
  79.             n = j = k = 0;
  80.             if( !not_ready ){
  81.                 get_filename( &n );
  82.                 put_filename( strptn, &j, &k, n );
  83.             }
  84.         }
  85.         else if( c_drv==17 ){
  86.             i = cdr_status( 0, 0, 0 );
  87.             if( !i ){
  88.                 get_filename( &n );
  89.                 put_filename( strptn, &j, &k, n );
  90.             }
  91.         }
  92.         else{
  93.             get_filename( &n );
  94.             put_filename( strptn, &j, &k, n );
  95.         }
  96.     }
  97.     if( *name ){
  98.         font_ank_col( FILER_COL_1, FILER_COL_4 );
  99.         font_kan_col( FILER_COL_1, FILER_COL_4 );
  100.         font_mix( strptn, page, POS( fx+12, fy+146 ), name, 0 );
  101.     }
  102.     if( type )
  103.         line( egbwork, fx+15+o*6, fy+147, fx+15+o*6, fy+156, FILER_COL_5 );
  104.     m = 8;
  105.     font_kan_col( FILER_COL_1, FILER_COL_4 );
  106.     font_kan( strptn, page, POS( fx+50, fy+43 ), drv[ c_drv - 1 ], 0 );
  107.     scroll.x1 = fx + 118;
  108.     scroll.y1 = fy +  55;
  109.     scroll.x2 = fx + 327;
  110.     scroll.y2 = fy + 186;
  111.     MOS_awake;
  112. loop:    ; ;
  113.     do {
  114.         MOS_rdpos( &ch, &mx, &my );
  115.     } while( ch==2 );
  116.     if( ch && cmp( mx,fx+40,fx+71 ) && cmp( my,fy+32,fy+63 ) ){
  117.         _dos_getdrive( &c_drv );
  118.         if( c_drv==17 ){
  119.             i = cdr_status( 0, 0, 0 );
  120.             if( i )
  121.                 goto loop;
  122.         }
  123.         if( c_drv<=2 ){
  124.             disk_status( ( int )c_drv - 1, ¬_ready, &protect );
  125.             if( not_ready )
  126.                 goto    loop;
  127.         }
  128.         MOS_sleep;
  129.         box( egbwork, fx +  70, fy +  32, fx +  71, fy +  63, FILER_COL_4 );
  130.         box( egbwork, fx +  40, fy +  62, fx +  71, fy +  63, FILER_COL_4 );
  131.         frame( egbwork, fx +  40, fy +  32, fx +  71, fy +  63, FILER_COL_1 );
  132.         frame( egbwork, fx +  41, fy +  33, fx +  71, fy +  63, FILER_COL_1 );
  133.         sleep( 10 );
  134.         get_filename( &n );
  135.         put_filename( strptn, &j, &k, n );
  136.         box( egbwork, fx +  40, fy +  32, fx +  71, fy +  33, FILER_COL_4 );
  137.         box( egbwork, fx +  40, fy +  32, fx +  41, fy +  63, FILER_COL_4 );
  138.         frame( egbwork, fx +  40, fy +  32, fx +  70, fy +  62, FILER_COL_1 );
  139.         frame( egbwork, fx +  40, fy +  32, fx +  71, fy +  63, FILER_COL_1 );
  140.         MOS_awake;
  141.     }
  142.     if( ch && n && cmp( mx,fx+344,fx+359 ) && cmp( my,fy+160,fy+175 ) &&
  143.         j>=11 ){
  144.         MOS_sleep;
  145.         button_on( egbwork, fx+344, fy+160, fx+359, fy+175 );
  146.         EGB_color( egbwork, 1, FILER_COL_4 );
  147.         sleep( 10 );
  148.         font_ank_col( FILER_COL_1, FILER_COL_4 );
  149.         font_kan_col( FILER_COL_1, FILER_COL_4 );
  150.         while( ch==1 && j>=11 ){
  151.             EGB_partScroll( egbwork, 1, 0, 12, ( char *)&scroll );
  152.             j--;
  153.             if( f_attr[ j - k ]==1 ){
  154.                 font_ank( strptn, page, POS( fx+120, fy+55 ),
  155.                                                         "<             >", 0 );
  156.                 font_mix( strptn, page, POS( fx+128, fy+55 ),
  157.                                                         f_name[ j-10 ], 0 );
  158.             }
  159.             else
  160.                 font_mix( strptn, page, POS( fx+120, fy+55 ),
  161.                                                         f_name[ j-10 ], 0 );
  162.             font_10( strptn, 
  163.                 page, POS( fx+280, fy+55 ), ( int )file_size[ j - 10 ], 8, 1 );
  164.             sleep( 2 );
  165.             MOS_rdpos( &ch, 0, 0 );
  166.         }
  167.         button_off( egbwork, fx+344, fy+160, fx+359, fy+175 );
  168.         frame( egbwork, fx+344, fy+160, fx+359, fy+175, FILER_COL_1 );
  169.         MOS_awake;
  170.     }
  171.     if( ch && n && cmp( mx,fx+344,fx+359 ) && cmp( my,fy+176,fy+191 ) &&
  172.         n>=j+2 ){
  173.         MOS_sleep;
  174.         button_on( egbwork, fx+344, fy+176, fx+359, fy+191 );
  175.         EGB_color( egbwork, 1, FILER_COL_4 );
  176.         sleep( 10 );
  177.         font_ank_col( FILER_COL_1, FILER_COL_4 );
  178.         font_kan_col( FILER_COL_1, FILER_COL_4 );
  179.         while( ch==1 && n>=j+2 ){
  180.             EGB_partScroll( egbwork, 1, 0, -12, ( char *)&scroll );
  181.             j++;
  182.             if( f_attr[ j ]==1 ){
  183.                 font_ank( strptn, page, POS( fx+120, fy+175 ),
  184.                                                         "<             >", 0 );
  185.                 font_mix( strptn, page, POS( fx+128, fy+175 ),
  186.                                                         f_name[ j ], 0 );
  187.             }
  188.             else
  189.                 font_mix( strptn, page, POS( fx+120, fy+175 ),
  190.                                                         f_name[ j ], 0 );
  191.             font_10( strptn, 
  192.                 page, POS( fx+280, fy+175 ), ( int )file_size[ j ], 8, 1 );
  193.             sleep( 2 );
  194.             MOS_rdpos( &ch, 0, 0 );
  195.         }
  196.         button_off( egbwork, fx+344, fy+176, fx+359, fy+191 );
  197.         frame( egbwork, fx+344, fy+176, fx+359, fy+191, FILER_COL_1 );
  198.         MOS_awake;
  199.     }
  200.     if( ch && n && cmp( mx, fx+120, fx+327 ) && cmp( my, fy+55, fy+66+k*12 ) ){
  201.         MOS_sleep;
  202.         m = ( my - fy - 55 ) / 12;
  203.         font_ank_col( FILER_COL_4, FILER_COL_1 );
  204.         font_kan_col( FILER_COL_4, FILER_COL_1 );
  205.         font_ank( strptn, page, POS( fx+120, fy+55+m*12 ),
  206.         "                                   ", 0 );
  207.         font_mix( strptn, page, POS( fx+120, fy+55+m*12 ),
  208.                                                      f_name[ j-k+m ], 0 );
  209.         font_10( strptn, 
  210.             page, POS( fx+280, fy+55+m*12 ), ( int )file_size[ j-k+m ], 8, 1 );
  211.         sleep( 10 );
  212.         do{
  213.             MOS_rdpos( &ch, 0, 0 );
  214.         }while( ch==1 );
  215.         font_ank_col( FILER_COL_1, FILER_COL_4 );
  216.         font_kan_col( FILER_COL_1, FILER_COL_4 );
  217.         font_ank( strptn, page, POS( fx+120, fy+55+m*12 ),
  218.                                   "                                   ", 0 );
  219.         font_mix( strptn, page, POS( fx+120, fy+55+m*12 ),
  220.                                                     f_name[ j-k+m ], 0 );
  221.         font_10( strptn, 
  222.             page, POS( fx+280, fy+55+m*12 ), ( int )file_size[ j-k+m ], 8, 1 );
  223.         if( f_attr[ j-k+m ]==1 ){
  224.             font_ank_col( FILER_COL_4, FILER_COL_4 );
  225.             font_ank( strptn, page, POS( fx+12, fy+145 ), "             ", 0 );
  226.             font_ank_col( FILER_COL_1, FILER_COL_4 );
  227.             *name = '\0';
  228.             *s = 0;
  229.             _chdir( f_name[ j-k+m ] );
  230.             box( egbwork, fx+113, fy+25, fx+334, fy+ 38, FILER_COL_4 );
  231.             box( egbwork, fx+118, fy+55, fx+327, fy+186, FILER_COL_4 );
  232.             if( type )
  233.                 line( egbwork,fx+15+o*6,fy+147,fx+15+o*6,fy+156,FILER_COL_5 );
  234.             sleep( 10 );
  235.             m = 8;
  236.             get_filename( &n );
  237.             put_filename( strptn, &j, &k, n );
  238.             MOS_awake;
  239.             goto loop;
  240.         }
  241.         if( f_attr[ j-k+m ]==2 ){
  242.             font_ank_col( FILER_COL_4, FILER_COL_4 );
  243.             font_ank( strptn, page, POS( fx+12, fy+145 ), "             ", 0 );
  244.             font_ank_col( FILER_COL_1, FILER_COL_4 );
  245.             *name = '\0';
  246.             *s = 0;
  247.             i = 0;
  248.             while( crr_dir[ i ] )
  249.                 i++;
  250.             while( crr_dir[ i ]!='\\' )
  251.                 i--;
  252.             i==2 ? crr_dir[ 3 ] = '\0':crr_dir[ i ] = '\0';
  253.             _chdir( crr_dir );
  254.             box( egbwork, fx+113, fy+25, fx+334, fy+ 38, FILER_COL_4 );
  255.             box( egbwork, fx+118, fy+55, fx+327, fy+186, FILER_COL_4 );
  256.             if( type )
  257.                 line( egbwork,fx+15+o*6,fy+147,fx+15+o*6,fy+156,FILER_COL_5 );
  258.             sleep( 10 );
  259.             m = 8;
  260.             get_filename( &n );
  261.             put_filename( strptn, &j, &k, n );
  262.             MOS_awake;
  263.             goto loop;
  264.         }
  265.         *name = '\0';
  266.         box( egbwork, fx+12, fy+145, fx+100, fy+157, FILER_COL_4 );
  267.         font_ank_col( FILER_COL_1, FILER_COL_4 );
  268.         font_kan_col( FILER_COL_1, FILER_COL_4 );
  269.         font_mix( strptn, page, POS( fx+12, fy+146 ), f_name[ j-k+m ], 0 );
  270.         strcpy( name, f_name[ j-k+m ] );
  271.         *s = file_size[ j-k+m ];
  272.         if( type )
  273.             line( egbwork, fx+15+o*6, fy+147, fx+15+o*6, fy+156, FILER_COL_5 );
  274.         MOS_awake;
  275.     }
  276.     if( ch && cmp( mx, fx+16, fx+31 ) && cmp( my, fy+32, fy+63 ) ){
  277.         MOS_sleep;
  278.         button_on( egbwork, fx+16, fy+32, fx+31, fy+63 );
  279.         box( egbwork, fx+12, fy+145, fx+100, fy+157, FILER_COL_4 );
  280.         *name = '\0';
  281.         *s = 0;
  282. loop_1:    c_drv--;
  283.         if( c_drv==3 )
  284.             c_drv--;
  285. loop_a:    _dos_setdrive( c_drv, &d_drv );
  286.         _dos_getdrive( &d_drv );
  287.         if( d_drv!=c_drv ){
  288.             if( c_drv==0 ){
  289.                 c_drv = 17;
  290.                 goto loop_a;
  291.             }
  292.             c_drv--;
  293.             if( c_drv==3 )
  294.                 c_drv--;
  295.             goto loop_a;
  296.         }
  297.         c_drv = d_drv;
  298.         _dos_setdrive( c_drv, &d_drv );
  299.         font_kan_col( FILER_COL_1, FILER_COL_4 );
  300.         font_kan( strptn, page, POS( fx+50, fy+43 ), drv[ c_drv - 1 ], 0 );
  301.         sleep( 10 );
  302.         button_off( egbwork, fx+16, fy+32, fx+31, fy+63 );
  303.         frame( egbwork, fx+16, fy+32, fx+31, fy+63, FILER_COL_1 );
  304.         box( egbwork, fx+113, fy+25, fx+334, fy+ 38, FILER_COL_4 );
  305.         box( egbwork, fx+118, fy+55, fx+327, fy+187, FILER_COL_4 );
  306.         if( type )
  307.             line( egbwork, fx+15+o*6, fy+147, fx+15+o*6, fy+156, FILER_COL_5 );
  308.         n = flag = 0;
  309.         MOS_awake;
  310.     }
  311.     if( ch && cmp( mx, fx+80, fx+95 ) && cmp( my, fy+32, fy+63 ) ){
  312.         MOS_sleep;
  313.         button_on( egbwork, fx+80, fy+32, fx+95, fy+63 );
  314.         box( egbwork, fx+12, fy+145, fx+100, fy+157, FILER_COL_4 );
  315.         *name = '\0';
  316.         *s = 0;
  317. loop_2:    c_drv++;
  318.         if( c_drv==3 )
  319.             c_drv++;
  320. loop_b:    _dos_setdrive( c_drv, &d_drv );
  321.         _dos_getdrive( &d_drv );
  322.         if( d_drv!=c_drv ){
  323.             c_drv++;
  324.             if( c_drv>=18 )
  325.                 c_drv = 0;
  326.             else if( c_drv==3 )
  327.                 c_drv++;
  328.             goto loop_b;
  329.         }
  330.         c_drv = d_drv;
  331.         _dos_setdrive( c_drv, &d_drv );
  332.         font_kan_col( FILER_COL_1, FILER_COL_4 );
  333.         font_kan( strptn, page, POS( fx+50, fy+43 ), drv[ c_drv - 1 ], 0 );
  334.         sleep( 10 );
  335.         button_off( egbwork, fx+80, fy+32, fx+95, fy+63 );
  336.         frame( egbwork, fx+80, fy+32, fx+95, fy+63, FILER_COL_1 );
  337.         box( egbwork, fx+113, fy+25, fx+334, fy+ 38, FILER_COL_4 );
  338.         box( egbwork, fx+118, fy+55, fx+327, fy+187, FILER_COL_4 );
  339.         if( type )
  340.             line( egbwork, fx+15+o*6, fy+147, fx+15+o*6, fy+156, FILER_COL_5 );
  341.         n = flag = 0;
  342.         MOS_awake;
  343.     }
  344.     if( ch && cmp( mx, fx+1, fx+16 ) && cmp( my, fy+1, fy+16 ) ){
  345.         MOS_sleep;
  346.         EGB_writeMode( egbwork, XOR );
  347.         button_on( egbwork, fx+1, fy+1, fx+16, fy+16 );
  348.         sleep( 10 );
  349.         button_off( egbwork, fx+1, fy+1, fx+16, fy+16 );
  350.         EGB_writeMode( egbwork, PSET );
  351.         putimage( egbwork, fx, fy, fx + 375, fy + 209, 10 );
  352.         MOS_awake;
  353.         return( 1 );
  354.     }
  355.     if( ch && cmp( mx, fx+24, fx+55 ) && cmp( my, fy+176, fy+191 ) ){
  356.         MOS_sleep;
  357.         font_kan_col( FILER_COL_4, FILER_COL_1 );
  358.         font_kan( strptn, page, POS( fx+28, fy+178 ), "実行", 0 );
  359.         sleep( 10 );
  360.         font_kan_col( FILER_COL_1, FILER_COL_4 );
  361.         font_kan( strptn, page, POS( fx+28, fy+178 ), "実行", 0 );
  362.         putimage( egbwork, fx, fy, fx + 375, fy + 209, 10 );
  363.         MOS_awake;
  364.         if( *name )
  365.             return( 0 );
  366.         else
  367.             return( 1 );
  368.     }
  369.     if( ch && cmp( mx, fx+72, fx+103 ) && cmp( my, fy+176, fy+191 ) ){
  370.         MOS_sleep;
  371.         font_kan_col( FILER_COL_4, FILER_COL_1 );
  372.         font_kan( strptn, page, POS( fx+76, fy+178 ), "取消", 0 );
  373.         sleep( 10 );
  374.         font_kan_col( FILER_COL_1, FILER_COL_4 );
  375.         font_kan( strptn, page, POS( fx+76, fy+178 ), "取消", 0 );
  376.         putimage( egbwork, fx, fy, fx + 375, fy + 209, 10 );
  377.         MOS_awake;
  378.         return( 1 );
  379.     }
  380.     if( ch && cmp( mx, fx+17, fx+354 ) && cmp( my, fy+1, fy+16 ) ){
  381.         MOS_sleep;
  382.         x2 = mx - fx;
  383.         y2 = my - fy;
  384.         MOS_horizon( x2, 264 + x2 );
  385.         MOS_vertical( y2, 270 + y2 );
  386.         EGB_writeMode( egbwork, XOR );
  387.         frame( egbwork, fx, fy, fx + 375, fy + 209, FILER_COL_4 );
  388.         x1 = mx - x2;
  389.         y1 = my - y2;
  390.         MOS_rdpos( &ch, &x3, &y3 );
  391.         while( ch==1 ){
  392.             if( mx!=x3 || my!=y3 ){
  393.                 frame( egbwork, x1, y1, x1 + 375, y1 + 209, FILER_COL_4 );
  394.                 x1 = x3 - x2;
  395.                 y1 = y3 - y2;
  396.                 frame( egbwork, x1, y1, x1 + 375, y1 + 209, FILER_COL_4 );
  397.             }
  398.             mx = x3;
  399.             my = y3;
  400.             MOS_rdpos( &ch, &x3, &y3 );
  401.         }
  402.         frame( egbwork, x1, y1, x1 + 375, y1 + 209, FILER_COL_4 );
  403.         EGB_writeMode( egbwork, PSET );
  404.         MOS_horizon( 0, 639 );
  405.         MOS_vertical( 0, 479 );
  406.         if( fx!=x1 || fy!=y1 ){
  407.             putimage( egbwork, fx, fy, fx + 375, fy + 209, 10 );
  408.             fx = x1;
  409.             fy = y1;
  410.             flag = 1;
  411.             goto jump_b;
  412.         }
  413.         MOS_awake;
  414.     }
  415.     if( type ){
  416.         moji = key_read( &key_mode, 0 );
  417.         font_kan_col( FILER_COL_1, FILER_COL_4 );
  418.         if( !key_mode )
  419.             font_kan( strptn, page, POS( fx+72, fy+128 ), "英小", 0 );
  420.         else if( key_mode==1 )
  421.             font_kan( strptn, page, POS( fx+72, fy+128 ), "英大", 0 );
  422.         else
  423.             font_kan( strptn, page, POS( fx+72, fy+128 ), "カナ", 0 );
  424.         if( moji ){
  425.             if( moji==BS ){
  426.                 MOS_sleep;
  427.                 font_ank( strptn, page, POS( fx+12+o*6, fy+146 ), " ", 0 );
  428.                 *( name + o ) = 0x20;
  429.                 *( name + o+1 ) = '\0';
  430.                 if( o!=0 )
  431.                     o--;
  432.                 line( egbwork,fx+15+o*6,fy+147,fx+15+o*6,fy+156,FILER_COL_5 );
  433.                 MOS_awake;
  434.             }
  435.             else if( moji>=0x20 ){
  436.                 MOS_sleep;
  437.                 *( name + o ) = moji;
  438.                 *( name + o+1 ) = '\0';
  439.                 key_buff[ 0 ] = moji;
  440.                 key_buff[ 1 ] = 0;
  441.                 font_ank( strptn, page, POS( fx+12+o*6, fy+146 ), key_buff, 0);
  442.                 if( o!=11 )
  443.                     o++;
  444.                 line( egbwork,fx+15+o*6,fy+147,fx+15+o*6,fy+156,FILER_COL_5 );
  445.                 MOS_awake;
  446.             }
  447.         }
  448.     }
  449.     goto loop;
  450.  
  451. }
  452. void    sort( int n )
  453. {
  454.  
  455.     char    buff_a[ 15 ], buff_b;
  456.     int        i, j, k, l;
  457.     long    s;
  458.     i = 0;
  459.     while( f_attr[ i ]!=0 && i<=n-1 )
  460.         i++;
  461.     if( i>=n ){
  462.         i = j = k = 0;
  463.         goto jump;
  464.     }
  465.     j = k = i;
  466.     for( i=j;i<=n-1;i++ ){
  467.         if( f_attr[ i ]==1 ){
  468.             strcpy( buff_a, f_name[ k ] );
  469.             strcpy( f_name[ k ], f_name[ i ] );
  470.             strcpy( f_name[ i ], buff_a );
  471.             buff_b = f_attr[ k ];
  472.             f_attr[ k ] = f_attr[ i ];
  473.             f_attr[ i ] = buff_b;
  474.             s = file_size[ k ];
  475.             file_size[ k ] = file_size[ i ];
  476.             file_size[ i ] = s;
  477.             k++;
  478.         }
  479.     }
  480.     if( f_attr[ 0 ]==2 )
  481.         l = 1;
  482.     else
  483.         l = 0;
  484.     if( k<=l+1 )
  485.         goto jump;
  486.     for( j=l;j<=k-2;j++ ){
  487.         for( i=l;i<=k-2-j;i++ ){
  488.             if( strcmp( f_name[ i ], f_name[ i+1 ] )>=1 ){
  489.                 strcpy( buff_a, f_name[ i+1 ] );
  490.                 strcpy( f_name[ i+1 ], f_name[ i ] );
  491.                 strcpy( f_name[ i ], buff_a );
  492.                 s = file_size[ i+1 ];
  493.                 file_size[ i+1 ] = file_size[ i ];
  494.                 file_size[ i ] = s;
  495.             }
  496.         }
  497.     }
  498. jump:    ; ;
  499.     for( j=0;j<=n-2-k;j++ ){
  500.         for( i=k;i<=n-2-j;i++ ){
  501.             if( strcmp( f_name[ i ], f_name[ i+1 ] )>=1 ){
  502.                 strcpy( buff_a, f_name[ i+1 ] );
  503.                 strcpy( f_name[ i+1 ], f_name[ i ] );
  504.                 strcpy( f_name[ i ], buff_a );
  505.                 s = file_size[ i+1 ];
  506.                 file_size[ i+1 ] = file_size[ i ];
  507.                 file_size[ i ] = s;
  508.             }
  509.         }
  510.     }
  511.  
  512. }
  513. void    get_filename( int    *n )
  514. {
  515.  
  516.     struct    find_t file;
  517.     
  518.     *n = 0;
  519.     if( _dos_findfirst( "*.*", _A_SUBDIR, &file )==0 ){
  520.         if( file.name[ 0 ]!='.' ){
  521.             strcpy( f_name[ *n ], file.name );
  522.             file_size[ *n ] = file.size;
  523.             if( file.attrib==16 )
  524.                 f_attr[ *n ] = 1;
  525.             else
  526.                 f_attr[ *n ] = 0;
  527.             *n += 1;
  528.         }
  529.         while( _dos_findnext( &file )==0 && *n<=1023 ){
  530.             strcpy( f_name[ *n ], file.name );
  531.             file_size[ *n ] = file.size;
  532.             if( file.attrib==16 )
  533.                 f_attr[ *n ] = 1;
  534.             else
  535.                 f_attr[ *n ] = 0;
  536.             *n += 1;
  537.         }
  538.     }
  539.     if( *n ){
  540.         if( f_name[ 0 ][ 0 ]=='.' )
  541.             f_attr[ 0 ] = 2;
  542.         sort( *n );
  543.         if( f_attr[ 0 ]==2 )
  544.             strcpy( f_name[ 0 ], "<<Directry_Up>>" );
  545.     }
  546. }
  547. void    put_filename( char *strptn, int *j, int *k, int n )
  548. {
  549.  
  550.     char    dir[37];
  551.     int        i;
  552.     UINT    a, b, c, c_drv;
  553.     ULONG    d;
  554.     struct diskfree_t disk;
  555.  
  556.     _dos_getdrive( &c_drv );
  557.     _dos_getdiskfree( c_drv, &disk );
  558.     a = disk.avail_clusters;
  559.     b = disk.sectors_per_cluster;
  560.     c = disk.bytes_per_sector;
  561.     d = a * b * c;
  562.     font_10( strptn, page, POS( fx+34, fy+98 ), ( int )d, 9, 1 );
  563.     _getcwd( crr_dir, 80 );
  564.     _rstrncpy( dir, crr_dir, 35 );
  565.     dir[ 35 ] = '\0';
  566.     font_ank_col( FILER_COL_1, FILER_COL_4 );
  567.     font_kan_col( FILER_COL_1, FILER_COL_4 );
  568.     font_mix( strptn, page, POS( fx+120, fy+26 ), dir, 34 );
  569.     if( n ){
  570.         n<=10 ? *j = *k = n-1 : *j = *k = 10;
  571.         for( i=0;i<=*j;i++ ){
  572.             if( f_attr[ i ]==1 ){
  573.                 font_ank( strptn, page, POS( fx+120, fy+55+i*12 ), 
  574.                 "<             >", 0 );
  575.                 font_mix( strptn, page, POS( fx+128, fy+55+i*12 ),
  576.                                                             f_name[i], 0 );
  577.             }
  578.             else
  579.                 font_mix( strptn, page, POS( fx+120, fy+55+i*12 ),
  580.                                                             f_name[i], 0 );
  581.             font_10( strptn, 
  582.                 page, POS( fx+280, fy+55+i*12 ), ( int )file_size[ i ], 8, 1 );
  583.         }
  584.     }
  585.     
  586. }
  587. void    display_filer( char *egbwork, char *strptn )
  588. {
  589.  
  590.     int        i, j;
  591.     
  592.     getimage( egbwork, fx, fy, fx + 375, fy + 209, 10 );
  593.     box( egbwork, fx      , fy     , fx + 375, fy + 209, FILER_COL_1 );
  594.     box( egbwork, fx +   1, fy + 19, fx + 372, fy + 206, FILER_COL_4 );
  595.     box( egbwork, fx + 176, fy +  1, fx + 354, fy +  17, FILER_COL_3 );
  596.     box( egbwork, fx + 353, fy +  1, fx + 372, fy +  17, FILER_COL_2 );
  597.     frame( egbwork, fx +  40, fy +  32, fx +  70, fy +  62, FILER_COL_1 );
  598.     frame( egbwork, fx +  40, fy +  32, fx +  71, fy +  63, FILER_COL_1 );
  599.     frame( egbwork, fx +   8, fy +  96, fx + 103, fy + 111, FILER_COL_1 );
  600.     frame( egbwork, fx +   8, fy + 144, fx + 103, fy + 159, FILER_COL_1 );
  601.     frame( egbwork, fx +  23, fy + 175, fx +  56, fy + 192, FILER_COL_1 );
  602.     frame( egbwork, fx +  21, fy + 173, fx +  58, fy + 194, FILER_COL_1 );
  603.     frame( egbwork, fx +  71, fy + 175, fx + 104, fy + 192, FILER_COL_1 );
  604.     frame( egbwork, fx + 112, fy +  24, fx + 335, fy +  39, FILER_COL_1 );
  605.     frame( egbwork, fx + 112, fy +  48, fx + 335, fy + 191, FILER_COL_1 );
  606.     button_off( egbwork, fx + 344, fy +  48, fx + 359, fy + 159 );
  607.     button_off( egbwork, fx + 344, fy + 160, fx + 359, fy + 175 );
  608.     button_off( egbwork, fx + 344, fy + 176, fx + 359, fy + 191 );
  609.     button_off( egbwork, fx +  16, fy +  32, fx +  31, fy +  63 );
  610.     button_off( egbwork, fx +  80, fy +  32, fx +  95, fy +  63 );
  611.     frame( egbwork, fx + 344, fy +  48, fx + 359, fy + 159, FILER_COL_1 );
  612.     frame( egbwork, fx + 344, fy + 160, fx + 359, fy + 175, FILER_COL_1 );
  613.     frame( egbwork, fx + 344, fy + 176, fx + 359, fy + 191, FILER_COL_1 );
  614.     frame( egbwork, fx +  16, fy +  32, fx +  31, fy +  63, FILER_COL_1 );
  615.     frame( egbwork, fx +  80, fy +  32, fx +  95, fy +  63, FILER_COL_1 );
  616.     frame( egbwork, fx + 354, fy + 7, fx + 366, fy + 15, FILER_COL_4 );
  617.     frame( egbwork, fx + 358, fy + 3, fx + 370, fy + 11, FILER_COL_4 );
  618.     line( egbwork, fx + 18, fy + 47, fx + 18, fy + 48, FILER_COL_1 );
  619.     line( egbwork, fx + 18, fy + 48, fx + 27, fy + 57, FILER_COL_1 );
  620.     line( egbwork, fx + 27, fy + 57, fx + 27, fy + 38, FILER_COL_1 );
  621.     line( egbwork, fx + 27, fy + 38, fx + 18, fy + 47, FILER_COL_1 );
  622.     line( egbwork, fx + 92, fy + 47, fx + 92, fy + 48, FILER_COL_1 );
  623.     line( egbwork, fx + 92, fy + 48, fx + 83, fy + 57, FILER_COL_1 );
  624.     line( egbwork, fx + 83, fy + 57, fx + 83, fy + 38, FILER_COL_1 );
  625.     line( egbwork, fx + 83, fy + 38, fx + 92, fy + 47, FILER_COL_1 );
  626.     line( egbwork, fx + 351, fy + 165, fx + 352, fy + 165, FILER_COL_1 );
  627.     line( egbwork, fx + 352, fy + 165, fx + 356, fy + 169, FILER_COL_1 );
  628.     line( egbwork, fx + 356, fy + 169, fx + 347, fy + 169, FILER_COL_1 );
  629.     line( egbwork, fx + 347, fy + 169, fx + 351, fy + 165, FILER_COL_1 );
  630.     line( egbwork, fx + 351, fy + 186, fx + 352, fy + 186, FILER_COL_1 );
  631.     line( egbwork, fx + 352, fy + 186, fx + 356, fy + 182, FILER_COL_1 );
  632.     line( egbwork, fx + 356, fy + 182, fx + 347, fy + 182, FILER_COL_1 );
  633.     line( egbwork, fx + 347, fy + 182, fx + 351, fy + 186, FILER_COL_1 );
  634.     paint( egbwork, fx + 24, fy + 47, FILER_COL_1 );
  635.     paint( egbwork, fx + 88, fy + 47, FILER_COL_1 );
  636.     paint( egbwork, fx + 352, fy + 167, FILER_COL_1 );
  637.     paint( egbwork, fx + 352, fy + 184, FILER_COL_1 );
  638.     button_off( egbwork, fx + 1, fy + 1 , fx + 16, fy + 16 );
  639.     for( j=0;j<=13;j++ ){
  640.         for( i=0;i<=13;i++ )
  641.             pset( egbwork, (i/2)*2+(j%2)+2+fx, j+2+fy, FILER_COL_4 );
  642.     }
  643.     font_kan_col( FILER_COL_4, FILER_COL_1 );
  644.     font_kan( strptn, page, POS( fx+32, fy+3 ), "ファイルセレクタ", 0 );
  645.     font_ank_col( FILER_COL_1, FILER_COL_4 );
  646.     font_kan_col( FILER_COL_1, FILER_COL_4 );
  647.     font_ank( strptn, page, POS( fx+36, fy+114 ), "Bytes Free", 0 );
  648.     font_kan( strptn, page, POS( fx+28, fy+178 ), "実行", 0 );
  649.     font_kan( strptn, page, POS( fx+76, fy+178 ), "取消", 0 );
  650.  
  651. }
  652. // 書き込みの際に容量が足りるかチェックする関数
  653. int        capa_check( char *name, long size )
  654. {
  655.  
  656.     UINT    a_c, s_p_c, b_p_s;
  657.     struct    find_t file;
  658.     struct    diskfree_t disk;
  659.     
  660.     _dos_getdiskfree( 0, &disk );
  661.     a_c   = disk.avail_clusters;
  662.     s_p_c = disk.sectors_per_cluster;
  663.     b_p_s = disk.bytes_per_sector;
  664.     if( _dos_findfirst( name, _A_NORMAL, &file )==0 ){
  665.         if( size>a_c*s_p_c*b_p_s+file.size )
  666.             return( 1 );    //容量が足りない
  667.         else
  668.             return( 0 );    //容量が足りる
  669.     }
  670.     else{
  671.         if( size>a_c*s_p_c*b_p_s )
  672.             return( 1 );    //容量が足りない
  673.         else
  674.             return( 0 );    //容量が足りる
  675.     }
  676.  
  677. }
  678.